<!--
 * @Author: your name
 * @Date: 2022-03-28 17:14:18
 * @LastEditTime: 2022-03-28 17:31:28
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \geyao\geyao\设计模式220328工厂模式.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>工厂模式</title>
</head>
<body>
  <script>
    // 简单的工厂模式可以理解为解决多个相似的问题
    function CreatePerson(name,age,sex){
      //创建一个新的对象
    //    var obj=new Object();
       this.name = name;
       this.age=age
       this.sex=sex
       this.say=function(){
        return "我是可爱的人"
      }
    }
    var p1 = new CreatePerson("geyao",'18','男');
var p2 = new CreatePerson("fangfang",'18','女');
console.log(p1.name); // geyao
console.log(p1.age);  // 18
console.log(p1.sex);  // 男
console.log(p1.say()); // 我是可爱的人

console.log(p2.name);  // fangfang
console.log(p2.age);   // 18
console.log(p2.sex);   // 女
console.log(p2.say()); // 我是可爱的人

// 返回都是object 无法识别对象的类型 不知道他们是哪个对象的实列
// console.log(typeof p1);  // object
// console.log(typeof p2);  // object
// console.log(p1 instanceof Object); // true

// 如上代码：函数CreatePerson能接受三个参数name,age,sex等参数，可以无数次调用这个函数，每次返回都会包含三个属性和一个方法的对象。

// 工厂模式是为了解决多个类似对象声明的问题;也就是为了解决实列化对象产生重复的问题。

// 优点：能解决多个相似的问题。

// 缺点：不能知道对象识别的问题(对象的类型不知道)。
  </script>
</body>
</html>